package Logica.Enemigos;

import General.Constantes;
import Graficas.InterfaceGrafica;
import Graficas.Sprite;
import Graficas.SpriteMovements;
import Logica.Personaje;
/**
 * Clase que representa a Monkey.
 * @author Mariano Rodecker
 * @author Matias Varela
 *
 */
public class Monkey extends Enemigo {
	protected int cantGolpes, golpesAux, dirAux;
	protected boolean modoMortal;
	protected long tiempoModoMortal;

	/**
	 * Constructor para Monkey
	 * @param sizeX
	 * @param sizeY
	 * @param sm
	 * @param ig
	 */
	public Monkey(int sizeX, int sizeY, SpriteMovements sm, InterfaceGrafica ig) {
		super(sizeX, sizeY, sm, ig);
		cantGolpes = 10;
		golpesAux = 0;
		dirAux = Constantes.dir_left;
	}

	/**
	 * Retorna la cantidad de golpes le quedan.
	 * @return
	 */
	public int getCantGolpes() {
		return cantGolpes;
	}

	@Override
	public void ganar() {
		// TODO Auto-generated method stub

	}

	/**
	 * Monkey muere si la cantidad de golpes que le quedan es 0.
	 * Cada una cierta cantidad de golpes, Monkey entra en un estado modoMortal.
	 */
	@Override
	public void morir() {
		if (cantGolpes == 0)
			this.isDead = true;
		else {
			if (golpesAux == 2) {
				modoMortal = true;
				tiempoModoMortal = System.currentTimeMillis();
				golpesAux = 0;
			} else {
				golpesAux++;
				cantGolpes--;
			}

		}
	}

	@Override
	public boolean isWin() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean isDead() {
		return this.isDead;
	}

	@Override
	public Sprite getSprite() {
		if (cantGolpes > 5)
			if (!modoMortal){
				if (getDirActual() == Constantes.dir_left) {
					return getSpriteMovements().getSprite(2);
				} else
					return getSpriteMovements().getSprite(3);
			}
			else{
				return getSpriteMovements().getSprite(5);
			}
		else {
			if (!modoMortal){
				if (getDirActual() == Constantes.dir_left) {
					return getSpriteMovements().getSprite(0);
				} else
					return getSpriteMovements().getSprite(1);
			}
			else
				return getSpriteMovements().getSprite(4);
		}

	}

	@Override
	public int getPuntosPorMuerte() {
		return intel.getPuntuacion().puntosPorMuerteMonkey();
	}

	@Override
	public int getPuntosPorDestruccion() {
		return intel.getPuntuacion().puntosPorDestruccionMonkey();
	}

	public Enemigo clone() {
		Monkey e = new Monkey(this.getSizeX(), this.getSizeY(), this.getSpriteMovements().clone(), this.getInterfaceGrafica());
		e.setX(this.getSizeX());
		e.setY(this.getSizeY());
		e.setDirActual(this.getDirActual());
		e.setInteligencia(this.intel);
		return e;
	}

	@Override
	public boolean mataAMario() {
		return modoMortal;
	}

	@Override
	public void moverse() {
		if (System.currentTimeMillis() - tiempoModoMortal > 2000) {
			modoMortal = false;
		}
		if (modoMortal) {
			setDirActual(Constantes.dir_nada_right);
		} else {
			if (getDirActual() == Constantes.dir_nada_right) {
				setDirActual(Constantes.dir_left);
			}
		}
		super.moverse();

	}

	@Override
	public void aumentarPuntos(int n) {
		// TODO Auto-generated method stub
		
	}

}
